The present disclosure relates in general to the field of computer systems analysis, and more specifically, to automatically inspecting computer software system architecture.
Modern distributed software systems can enable transactions that cross system and network boundaries, with backend systems communicating with additional backend systems to generate results or provide a service for a client. As an example, online travel reservation systems often involve a frontend website with which users interact on their browser. To search for and complete a reservation in response to a user's request, the host of the travel reservation site may interact with other backend services, including services and systems provided by third parties, such as airlines, car rental companies, hotel companies, credit card payment systems, and so on. These third party services may, themselves, also communicate with and consume services of still further systems, resulting in a chain of transactions and dependencies in response to a single user's request. Additionally, each system itself may be composed of multiple different sub-systems, or components, that interact with each other (and even other systems) in different ways depending on the transaction.
While the breadth and sophistication of the services provided by distributed systems continues to expand and enrich users' lives, the complexity of these systems, their components, and their interoperation also increases. Indeed, it is not uncommon for multiple different enterprises and their systems to be involved in a single transaction. Even within transaction performed by a single entity's system, the multiple composite components of that system are often developed by and “owned” by distinct development teams, with few if any developers or administrators having an in-depth global knowledge of the system and all of its composite parts. This can pose a challenge to developers and administrators as they seek to modify, update, test, verify, and develop components for such software systems.